// t5Tension.txt
// Modified basicnpc.txt, used under the Hektos ruins. Creature has special
//  death_state text, and if creature's health is low enough, kills self
//  (and presents alternative death text).
//
// Memory Cells:
//   Cell 0 - How creature moves.
//     0 - If 0, wander randomly. 
//     1 - Stands still until a target appears.
//     2 - Completely immobile, even if target appears.
//   Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this 
//     is killed, set to 2. (Example: If cell 1 is 3 and cell 2 is 5, when
//     creature is killed, sets SDF(3,5) to 2.)
//   Cell 3 - Dialogue node to start with if talked to. if left at 0, this
//     character doesn't talk.


begincreaturescript;

variables;

short i,target;
short trgt_hlt = 0;
short suicide = 0;

body;

beginstate INIT_STATE;
	if (get_memory_cell(0) == 2)
		set_mobility(ME,0);
	set_strategy(ME,0);

break;

beginstate DEAD_STATE;
	// Set the appropriate stuff done flag for this character being dead

	if (suicide == 0) {
		reset_dialog();
		add_dialog_str(0,"Stirlen staggers back, clutching his wounds. The crazed smile fades from his face, and he brandishes the dagger with a more serious air.",0);
		if(char_ok(8) == 1)
			add_dialog_str(1,"_Ah, you think you've won, don't you? Well, you're wrong... she's going to die, and soon we'll be together. And that means I win._",0);
		else
			add_dialog_str(1,"_You think you've won? You've just saved me the trouble of killing myself. Now, I can be together with Miali, and so, I thank you._",0);
		add_dialog_str(2,"He falls over, and promptly dies.",0);
		add_dialog_str(3,"After a moment's consideration, you toss his body into the forge. This whole incident is best forgotten, you believe, so you might as well get rid of the evidence.",0);
		run_dialog(1);
		}

	if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0))
		set_flag(get_memory_cell(1),get_memory_cell(2),2);
break;

beginstate START_STATE; 

	//If Miali is dead, go kill myself
	if(char_ok(8) != 1)
		set_state_continue(15);

	//If low health, go kill myself
	if(get_health(ME) <= (get_max_health(ME) / 6)) {
		set_state_continue(15);
		}

	// if I have a target for some reason, go attack it
	if (target_ok()) {
		if (dist_to_char(get_target()) <= 16)
			set_state(3);
			else 
				set_target(ME,-1);
		}
	
	// Look for a target, attack it if visible
	if (select_target(ME,8,0)) {
		trgt_hlt = get_health(get_target());
		do_attack();
		if((get_flag(5,4) == 0) && (get_health(get_target()) < trgt_hlt)) {
			message_dialog("The sting of Stirlen's poisoned dagger is a little familiar. In fact, you think you recognize the poison from a regrettable experience with a potion merchant a few years back.","So, if your memory serves you right, you should be able to treat Miali, assuming you can beat Stirlen in time.");
			set_flag(5,4,1);
			}
		set_state(3);
		}
		
	// Have I been hit? Strike back!
	if (who_hit_me() >= 0) {
		set_target(ME,who_hit_me());
		trgt_hlt = get_health(get_target());
		do_attack();
		if((get_flag(5,4) == 0) && (get_health(get_target()) < trgt_hlt)) {
			message_dialog("The sting of Stirlen's poisoned dagger is a little familiar. In fact, you think you recognize the poison from a regrettable experience with a potion merchant a few years back.","So, if your memory serves you right, you should be able to treat Miali, assuming you can beat Stirlen in time.");
			set_flag(5,4,1);
			}
		set_state(3);
		}

	// Otherwise, just peacefully move around. Go back to start, if I'm too far
	// from where I started.
	if ((my_dist_from_start() >= 6) || ((my_dist_from_start() > 0) && (get_memory_cell(0) > 0))) {
		if (get_ran(1,1,100) < 40) 
			return_to_start(ME,1);
		}
		else if (get_memory_cell(0) == 0) {
			fidget(ME,25);
			}

	// if we're in combat and the above didn't give me anything to do, just
	// stop now. Otherwise, game will keep running script, and that eats up CPU time.
	if (am_i_doing_action() == FALSE)
		end_combat_turn();
break;

beginstate 3; // attacking

	//If low health, go kill myself
	if(get_health(ME) <= (get_max_health(ME) / 6)) {
		set_state_continue(15);
		}

	if (target_ok() == FALSE)
		set_state(START_STATE);

	trgt_hlt = get_health(get_target());
	do_attack();
	if((get_flag(5,4) == 0) && (get_health(get_target()) < trgt_hlt)) {
		message_dialog("The sting of Stirlen's poisoned dagger is a little familiar. In fact, you think you recognize the poison from a regrettable experience with a potion merchant a few years back.","So, if your memory serves you right, you should be able to treat Miali, assuming you can beat Stirlen in time.");
		set_flag(5,4,1);
		}
break;

beginstate TALKING_STATE;
	if (get_memory_cell(3) == 0) {
		print_str("Talking: It doesn't respond.");
		end();
		}
	begin_talk_mode(get_memory_cell(3));
break;

beginstate 15; //low health -> suicide

	suicide = 1;
	reset_dialog();
	add_dialog_str(0,"Stirlen staggers back, clutching his wounds. The crazed smile fades from his face, and he brandishes the dagger with a more serious air.",0);
	if(char_ok(8) == 1)
		add_dialog_str(1,"_Well, I don't see a need to stick around, if this is how you're going to treat me. I'll just go wait for Miali..._",0);
	else
		add_dialog_str(1,"_Well, I don't see the point in waiting for you to kill me anymore. I can speed up the process, and I can join Miali..._",0);
	add_dialog_str(2,"You think about stopping him, but figure that he's far enough gone that nothing will save him. All you can do is watch him drive his own dagger into his heart.",0);
	add_dialog_str(3,"Predictably, it causes a bit of a mess, and he dies rather quickly.",0);
	add_dialog_str(4,"After a moment's consideration, you toss his body into the forge. This whole incident is best forgotten, and you might as well destroy the evidence.",0);
	run_dialog(1);

	kill_char(7,2,0);
	
	put_stain_on_space(my_loc_x(),my_loc_y(),3);
break;